package com.web.kftsdk.entity;

import com.web.kftsdk.common.util.str.StringUtils;
import lombok.Data;

import java.util.Map;
import java.util.TreeMap;

/**
 * <p>Title: NotifyRes</p>
 * <p>Description: TODO</p>
 *
 * @author xukk
 * @version 1.0
 * @date 2018/6/15
 */
@Data
public class NotifyRes {
    /**
     * 参数名称:语言
     * 是否必须：否
     * 参数描述：用于支持不同语言.java国际化中标准的locale值，如zh_CN表示中文，en表示英文；
     */
    private String language;

    /**
     * 参数名称:调用端IP
     * 是否必须：否
     * 参数描述：快付通服务器对应的IP
     */
    private String callerIp;

    /**
     * 参数名称:参数签名算法
     * 是否必须：否
     * 参数描述：RSA
     */
    private String signatureAlgorithm;

    /**
     * 参数名称:签名值
     * 是否必须：否
     * 参数描述：所有需要参与签名的请求参数,通过指定的签名算法计算后得出的字符串.具体见第5章节，使用商户私钥进行加签
     */
    private String signatureInfo;

    /**
     * 参数名称:订单编号
     * 是否必须：否
     * 参数描述：对应请求参数中的同名参数
     */
    private String orderNo;

    /**
     * 参数名称:交易状态
     * 是否必须：否
     * 参数描述：交易结果,详见第5.2.1章节。失败详情参见failureDetails
     */
    private String status;

    /**
     * 参数名称:错误码
     * 是否必须：可空
     * 参数描述：
     */
    private String errorCode;

    /**
     * 参数名称:失败详情
     * 是否必须：可空
     * 参数描述：失败详情，对于快付通内部异常时会截取512长度，其他长度无限制
     */
    private String failureDetails;

    /**
     * 参数名称:账务日期
     * 是否必须：可空
     */
    private String checkDate;

    /**
     * 对账状态
     */
    private String reconStatus;

    /**
     * 参数名称:支付渠道流水
     * 是否必须：可空
     * 参数描述：支付宝渠道：支付宝交易流水，微信渠道：微信交易流水
     */
    private String channelNo;

    /**
     * 参数名称:应结订单金额
     * 是否必须：否
     * 参数描述：应结订单金额=订单金额-非充值代金券。此次交易的实际金额,单位:分,不支持小数点
     */
    private String settlementAmount;



    public Map toMap(){
        Map<String, String> map = new TreeMap<>();
        map.put("language",language);
        map.put("callerIp",callerIp);
        map.put("orderNo",orderNo);
        map.put("status",status);
        if(!StringUtils.isBlank(errorCode)){
            map.put("errorCode",errorCode);
        }
        if(!StringUtils.isBlank( failureDetails )){
            map.put( "failureDetails",failureDetails );
        }
        if(!StringUtils.isBlank( checkDate )){
            map.put( "checkDate",checkDate );
        }

        map.put("reconStatus",reconStatus);

        if(!StringUtils.isBlank( channelNo )){
            map.put( "channelNo",channelNo );
        }

        return map;
    }

}
